package org.jeecg.modules.innerApi.zhiYunSdApi.requestVo;

import com.alibaba.fastjson.annotation.JSONField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import org.jeecg.modules.xxgx.djgl.enums.ZsfsEnum;

import java.io.Serializable;
import java.util.List;

/**
* @Author: Niugeng
* @Create: 2023/08/30
* @Description：全电蓝票开具接口入参11
*/
@Data
@Builder
@EqualsAndHashCode(callSuper = false)
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "全电蓝票开具接口入参11")
public class SdQdlpkjjkrc11Param implements Serializable {

    private static final long serialVersionUID = 1L;


    /**
    * 发票请求流水号-否-string-唯一值 ，如若不传自行生成
    */
    @ApiModelProperty(value = "发票请求流水号-否-string-唯一值 ，如若不传自行生成")
    @JSONField(name = "fpqqlsh",ordinal = 0)
    private String fpqqlsh;

    /**
    * 发票类型代码-是-String-发票类型代码(详见附件 4)
    */
    @ApiModelProperty(value = "发票类型代码-是-String-发票类型代码(详见附件 4)")
    @JSONField(name = "fplxdm",ordinal = 1)
    private String fplxdm;

    public static enum FplxdmEnum {
        qdfp_tldzkp ("全电发票（铁路电子客票）","51"),
        qdfp_htys ("全电发票（航空运输电子客票行程单）","61"),
        qdfp_zzszyfp ("全电发票（增值税专用发票）","81"),
        qdfp_ptfp ("全电发票（普通发票）","82"),
        qdzzfp_zzszyfp ("全电纸质发票（增值税专用发票）","85"),
        qdzzfp_ptfp ("全电纸质发票（普通发票）","86"),
        zzsdzptfp ("增值税电子普票发票","026"),
        zzsdzzyfp ("增值税电子专用发票","028"),

        ;
        private final String desc;//描述
        private final String value;//值
        FplxdmEnum (String desc, String value) {
            this.desc = desc;
            this.value = value;
        }

        public String getDesc() {
            return desc;
        }

        public String getValue() {
            return value;
        }
    }

    /**
    * 特定要素类型代码-否-String-特殊票种(详见附件3)
    */
    @ApiModelProperty(value = "特定要素类型代码-否-String-特殊票种(详见附件3)")
    @JSONField(name = "tdyslxDm",ordinal = 2)
    private String tdyslxDm;

    /**
     * 特定要素类型代码枚举
     */
    public static enum tdyslxDmEnum {
        cpyfp ("成品油发票","01"),
        xtfp ("稀土发票","02"),
        jzfwfp ("建筑服务发票","03"),
        hwysfwfp ("货物运输服务发票","04"),
        bdcxsfwfp ("不动产销售服务发票","05"),
        bdcjyzlfw ("不动产经营租赁服务","06"),
        dsccs ("代收车船税","07"),
        txf ("通行费","08"),
        lkysfwfp ("旅客运输服务发票","09"),
        ylfwzyfp ("医疗服务（住院）发票","10"),
        ylfwmzfp ("医疗服务（门诊）发票","11"),
        zcncpxsfp ("自产农产品销售发票","12"),
        tljhlhsgjfp ("拖拉机和联合收割机发票","13"),
        jdc ("机动车","14"),
        esc ("二手车","15"),
        ncpsgfp ("农产品收购发票","16"),
        gfsgfp ("光伏收购发票","17"),
        jyfp ("卷烟发票","18"),
        ckfp ("出口发票","19"),
        ncp ("农产品","20"),
        esc_ ("二手车*","21"),
        hkysdzkpxcd ("航空运输电子客票行程单","22"),
        zckj ("正常开具","51"),
        fxkj ("反向开具","52"),
        ;
        private final String desc;//描述
        private final String value;//值
        tdyslxDmEnum (String desc, String value) {
            this.desc = desc;
            this.value = value;
        }

        public String getDesc() {
            return desc;
        }

        public String getValue() {
            return value;
        }
    }

    /**
    * 开票类型-是-String-0 正数发票，1 负数发票
    */
    @ApiModelProperty(value = "开票类型-是-String-0 正数发票，1 负数发票")
    @JSONField(name = "kplx",ordinal = 3)
    private String kplx;

    /**
     * 开票类型枚举
     */
    public static enum kplxEnum {
        zs ("正数","0"),
        fs ("负数","1");
        private final String desc;//描述
        private final String value;//值
        kplxEnum (String desc, String value) {
            this.desc = desc;
            this.value = value;
        }
    }

    /**
    * 销方识别号-是-String-销方识别号
    */
    @ApiModelProperty(value = "销方识别号-是-String-销方识别号")
    @JSONField(name = "xhdwsbh",ordinal = 4)
    private String xhdwsbh;

    /**
    * 销方名称-是-String-销方名称
    */
    @ApiModelProperty(value = "销方名称-是-String-销方名称")
    @JSONField(name = "xhdwmc",ordinal = 5)
    private String xhdwmc;

    /**
    * 销方地址电话-是-String-销方地址电话
    */
    @ApiModelProperty(value = "销方地址电话-是-String-销方地址电话")
    @JSONField(name = "xhdwdzdh",ordinal = 6)
    private String xhdwdzdh;

    /**
    * 销方银行账户-是-String-销方银行账户
    */
    @ApiModelProperty(value = "销方银行账户-是-String-销方银行账户")
    @JSONField(name = "xhdwyhzh",ordinal = 7)
    private String xhdwyhzh;

    /**
    * 购方税号-否-String-购方税号
    */
    @ApiModelProperty(value = "购方税号-否-String-购方税号")
    @JSONField(name = "ghdwsbh",ordinal = 8)
    private String ghdwsbh;

    /**
    * 购方名称-是-String-购方名称
    */
    @ApiModelProperty(value = "购方名称-是-String-购方名称")
    @JSONField(name = "ghdwmc",ordinal = 9)
    private String ghdwmc;

    /**
    * 购方地址电话-否-String-购方地址电话
    */
    @ApiModelProperty(value = "购方地址电话-否-String-购方地址电话")
    @JSONField(name = "ghdwdzdh",ordinal = 10)
    private String ghdwdzdh;

    /**
    * 购方银行账号-否-String-购方银行账号
    */
    @ApiModelProperty(value = "购方银行账号-否-String-购方银行账号")
    @JSONField(name = "ghdwyhzh",ordinal = 11)
    private String ghdwyhzh;

    /**
    * 征收方式-否-String-0：普通征税1：减按计征2：差额征税全额开具3：差额征税差额开具默认为 0
    */
    @ApiModelProperty(value = "征收方式-否-String-0：普通征税1：减按计征2：差额征税全额开具3：差额征税差额开具默认为 0")
    @JSONField(name = "zsfs",ordinal = 12)
    private String zsfs;
    /**
     * 征收方式枚举
     */
    public static enum zsfsEnum {
        ptzs ("普通征税","0"),
        jajz ("减按计征","1"),
        cezs_qekj ("差额征税全额开具","2"),
        cezs_cekj ("差额征税差额开具","3");
        private final String desc;//描述
        private final String value;//值
        zsfsEnum (String desc, String value) {
            this.desc = desc;
            this.value = value;
        }

        public String getDesc() {
            return desc;
        }

        public String getValue() {
            return value;
        }

        /**
         * 本系统字典转换为接口字典
         * @param value 本系统编码
         * @return
         */
        public static String convertValue(String value){
            if(ZsfsEnum.QEZS.getValue().equals(value))
                return zsfsEnum.cezs_qekj.getValue();
            if(ZsfsEnum.CEZS.getValue().equals(value))
                return zsfsEnum.cezs_cekj.getValue();
            return value;
        }
    }

    private List<SdQdlpkjjkFyxm> fyxm;

    /**
    * 合计金额-是-String-合计金额
    */
    @ApiModelProperty(value = "合计金额-是-String-合计金额")
    @JSONField(name = "hjje",ordinal = 29)
    private String hjje;

    /**
    * 合计税额-是-String-合计税额
    */
    @ApiModelProperty(value = "合计税额-是-String-合计税额")
    @JSONField(name = "hjse",ordinal = 30)
    private String hjse;

    /**
    * 加税合计-是-String-加税合计
    */
    @ApiModelProperty(value = "加税合计-是-String-加税合计")
    @JSONField(name = "jshj",ordinal = 31)
    private String jshj;

    /**
    * 扣除额-否-String-扣除额
    */
    @ApiModelProperty(value = "扣除额-否-String-扣除额")
    @JSONField(name = "kce",ordinal = 32)
    private String kce;

    /**
    * 开票人-否-String-开票人
    */
    @ApiModelProperty(value = "开票人-否-String-开票人")
    @JSONField(name = "kpr",ordinal = 33)
    private String kpr;

    /**
    * 收款人-否-String-收款人
    */
    @ApiModelProperty(value = "收款人-否-String-收款人")
    @JSONField(name = "skr",ordinal = 34)
    private String skr;

    /**
    * 复核人-否-String-复核人
    */
    @ApiModelProperty(value = "复核人-否-String-复核人")
    @JSONField(name = "fhr",ordinal = 35)
    private String fhr;

    /**
    * 购方电话-否-String-购方电话
    */
    @ApiModelProperty(value = "购方电话-否-String-购方电话")
    @JSONField(name = "gfkhdh",ordinal = 36)
    private String gfkhdh;

    /**
    * 购方邮箱-否-String-购方邮箱
    */
    @ApiModelProperty(value = "购方邮箱-否-String-购方邮箱")
    @JSONField(name = "gfkhyx",ordinal = 37)
    private String gfkhyx;

    /**
    * 税率说明可用值-否-String-税率说明（小规模 纳税人开具 3 税率 使用）前期已开具 发票 ，发生销售折 让、中止或者退回 等情形需要开具红 字发票 ，或者开票 有误需要重新开具传 2，因为实际经营业务需要，放弃享受减按 1%征收率征收增值税政策传3
    */
    @ApiModelProperty(value = "税率说明可用值-否-String-税率说明（小规模 纳税人开具 3 税率 使用）前期已开具 发票 ，发生销售折 让、中止或者退回 等情形需要开具红 字发票 ，或者开票 有误需要重新开具传 2，因为实际经营业务需要，放弃享受减按 1%征收率征收增值税政策传3")
    @JSONField(name = "slsm",ordinal = 38)
    private String slsm;

    /**
    * 备注-否-String-备注
    */
    @ApiModelProperty(value = "备注-否-String-备注")
    @JSONField(name = "bz",ordinal = 39)
    private String bz;

    /**
    * 确认购方信息是否-否-String-值为 1 是不确认购方信息可能会报（当前未查询到购买方纳税人信息，请确认是否继续开  具  ），默认是确认 意思是不管购方信  息是否真实存在都进行开具
    */
    @ApiModelProperty(value = "确认购方信息是否存在-否-String-值为 1 是不确认购方信息可能会报（当前未查询到购买方纳税人信息，请确认是否继续开  具  ），默认是确认 意思是不管购方信  息是否真实存在都进行开具")
    @JSONField(name = "gfxxConfirm",ordinal = 40)
    private String gfxxConfirm;

    /**
    * 是否开启自然人校-否-String-1：开启空：不开启/继续开票
    */
    @ApiModelProperty(value = "是否开启自然人校验-否-String-1：开启空：不开启/继续开票")
    @JSONField(name = "spflxConfirm",ordinal = 41)
    private String spflxConfirm;

    /**
    * 购方自然人标识-否-String-N：企业Y：个人不传默认为 N不传该节点或者节  点为空为 N ，其他  为 Y，N 代表不是自然人
    */
    @ApiModelProperty(value = "购方自然人标识-否-String-N：企业Y：个人不传默认为 N不传该节点或者节  点为空为 N ，其他  为 Y，N 代表不是自然人")
    @JSONField(name = "gfzrrbs",ordinal = 42)
    private String gfzrrbs;

    /**
    * 销方自然人标识-否-String-可用值 N，Y（不传值为 N）不传该节点或者节  点为空为 N ，其他  为 Y，N 代表不是自然人
    */
    @ApiModelProperty(value = "销方自然人标识-否-String-可用值 N，Y（不传值为 N）不传该节点或者节  点为空为 N ，其他  为 Y，N 代表不是自然人")
    @JSONField(name = "xfzrrbs",ordinal = 43)
    private String xfzrrbs;

    /**
    * 是否展示购方-否-String-是否展示购方银行账号到备注里面y/Y 展示 ，其他否
    */
    @ApiModelProperty(value = "是否展示购方-否-String-是否展示购方银行账号到备注里面y/Y 展示 ，其他否")
    @JSONField(name = "sfzsgmfyhzh",ordinal = 44)
    private String sfzsgmfyhzh;

    /**
    * 是否展示销方-否-String-是否展示购方银行账号到备注里面y/Y 展示 ，其他否
    */
    @ApiModelProperty(value = "是否展示销方-否-String-是否展示购方银行账号到备注里面y/Y 展示 ，其他否")
    @JSONField(name = "sfzsxsfyhzh",ordinal = 45)
    private String sfzsxsfyhzh;

    /**
    * 纸票票种代码-否-String-fplxdm 为 85 或 86 时必填（详见附件6）
    */
    @ApiModelProperty(value = "纸票票种代码-否-String-fplxdm 为 85 或 86 时必填（详见附件6）")
    @JSONField(name = "zpFppzDm",ordinal = 46)
    private String zpFppzDm;
    public static enum zpFppzDmEnum {
        zzszyfp_2016 ("2016版增值税普通发票（二联折叠票）","04"),
        zzszyfp ("增值税专用发票（中文三联无金额限制版）","1130")
        ;
        private final String desc;//描述
        private final String value;//值
        zpFppzDmEnum (String desc, String value) {
            this.desc = desc;
            this.value = value;
        }
    }

    /**
    * 纸质发票代码-否-String-fplxdm 为 85 时必填 ，1.23 接口获取
    */
    @ApiModelProperty(value = "纸质发票代码-否-String-fplxdm 为 85 时必填 ，1.23 接口获取")
    @JSONField(name = "zzfpdm",ordinal = 47)
    private String zzfpdm;

    /**
    * 纸质发票号码-否-String-fplxdm 为 85 时必填 ，1.23 接口获取
    */
    @ApiModelProperty(value = "纸质发票号码-否-String-fplxdm 为 85 时必填 ，1.23 接口获取")
    @JSONField(name = "zzfphm",ordinal = 48)
    private String zzfphm;

    /**
    * 服务发生地-否-String-tdyslxdm 为 03，05 ，06 必填
    */
    @ApiModelProperty(value = "服务发生地-否-String-tdyslxdm 为 03，05 ，06 必填")
    @JSONField(name = "fwfsd",ordinal = 49)
    private String fwfsd;

    /**
    * 服务发生地详-否-String-tdyslxdm 为 03，05 ，06 选填
    */
    @ApiModelProperty(value = "服务发生地详-否-String-tdyslxdm 为 03，05 ，06 选填")
    @JSONField(name = "fullAddress",ordinal = 50)
    private String fullAddress;

    /**
    * 跨地（市）标志-否-String-tdyslxdm 为 03 ，  05，06 必填,y 或者 Y 是，其他否，默认不传为否
    */
    @ApiModelProperty(value = "跨地（市）标志-否-String-tdyslxdm 为 03 ，  05，06 必填,y 或者 Y 是，其他否，默认不传为否")
    @JSONField(name = "kdsbz",ordinal = 51)
    private String kdsbz;

    /**
    * 土地增值税项-否-String-tdyslxdm 为 03，05 ，06 选填
    */
    @ApiModelProperty(value = "土地增值税项-否-String-tdyslxdm 为 03，05 ，06 选填")
    @JSONField(name = "tdzzsxmbh",ordinal = 52)
    private String tdzzsxmbh;

    /**
    * 建筑项目名称-否-String-tdyslxdm 为 03 必填
    */
    @ApiModelProperty(value = "建筑项目名称-否-String-tdyslxdm 为 03 必填")
    @JSONField(name = "jzxmmc",ordinal = 53)
    private String jzxmmc;

    /**
    * 不动产单元代  码/网签合同备-否-String-tdyxlsdm 为 05 选填
    */
    @ApiModelProperty(value = "不动产单元代  码/网签合同备-否-String-tdyxlsdm 为 05 选填")
    @JSONField(name = "wqhtbabh",ordinal = 54)
    private String wqhtbabh;

    /**
    * 租赁日期起-否-String-tdyslxdm06 必填yyyy-MM-dd
    */
    @ApiModelProperty(value = "租赁日期起-否-String-tdyslxdm06 必填yyyy-MM-dd")
    @JSONField(name = "zlrqq",ordinal = 55)
    private String zlrqq;

    /**
    * 租赁日期止-否-String-tdyslxdm06 必填yyyy-MM-dd
    */
    @ApiModelProperty(value = "租赁日期止-否-String-tdyslxdm06 必填yyyy-MM-dd")
    @JSONField(name = "zlrqz",ordinal = 56)
    private String zlrqz;

    /**
    * 核定计税价格-否-String-tdyxlsdm 为 05 选填
    */
    @ApiModelProperty(value = "核定计税价格-否-String-tdyxlsdm 为 05 选填")
    @JSONField(name = "hdjsjg",ordinal = 57)
    private String hdjsjg;

    /**
    * 实际成交含税-否-String-tdyxlsdm 为 05 选填
    */
    @ApiModelProperty(value = "实际成交含税-否-String-tdyxlsdm 为 05 选填")
    @JSONField(name = "sjcjhsje",ordinal = 58)
    private String sjcjhsje;

    /**
    * 房屋产权证书/-否-String-tdyxlsdm 为 05，06 选填
    */
    @ApiModelProperty(value = "房屋产权证书/-否-String-tdyxlsdm 为 05，06 选填")
    @JSONField(name = "cqzsh",ordinal = 59)
    private String cqzsh;

    /**
    * 单位-否-String-tdyxlsdm 为 05 ，  06 必填 ，详见附件8
    */
    @ApiModelProperty(value = "单位-否-String-tdyxlsdm 为 05 ，  06 必填 ，详见附件8")
    @JSONField(name = "dw",ordinal = 60)
    private String dw;

    public static enum dwEnum {
        pfqm ("平方千米","1"),
        pfm ("平方米","2"),
        kgl ("孔公里","3"),
        gq ("公顷","4"),
        m ("亩","5"),
        hm_2 ("h ㎡","6"),
        km_2 ("k ㎡","7"),
        m_2 ("㎡","8"),
        ;
        private final String desc;//描述
        private final String value;//值
        dwEnum (String desc, String value) {
            this.desc = desc;
            this.value = value;
        }
    }

    /**
    * 发动机号码-否-String-tdyxlsdm 为 013   和 sfyytljdj 为 Y 必填
    */
    @ApiModelProperty(value = "发动机号码-否-String-tdyxlsdm 为 013   和 sfyytljdj 为 Y 必填")
    @JSONField(name = "fdjhm",ordinal = 61)
    private String fdjhm;

    /**
    * 底盘号/机架号-否-String-tdyxlsdm 为 013   和 sfyytljdj 为 Y 必填
    */
    @ApiModelProperty(value = "底盘号/机架号-否-String-tdyxlsdm 为 013   和 sfyytljdj 为 Y 必填")
    @JSONField(name = "dphgzbh",ordinal = 62)
    private String dphgzbh;

    /**
    * 是否用于拖拉-否-Sring-y 或 Y 为是，如果为 Y，商品名称只允许1行
    */
    @ApiModelProperty(value = "是否用于拖拉-否-Sring-y 或 Y 为是，如果为 Y，商品名称只允许1行")
    @JSONField(name = "sfyytljdj",ordinal = 63)
    private String sfyytljdj;

    /**
     * 销售方农产品收购证件类型
     * 开具农产品收购发票该节点必填
     */
    @ApiModelProperty(value = "销售方农产品收购证件类型")
    private java.lang.String ncpsgzjlx;

    @ApiModelProperty(value = "货运和旅客运输")
    @JSONField(name = "hwys",ordinal = 64)
    List<SdQdlpkjjkHwys> hwys;
    @ApiModelProperty(value = "差额征税")
    @JSONField(name = "cepz",ordinal = 65)
    List<SdQdlpkjjkCepz> cepz;
    @ApiModelProperty(value = "附加要素")
    @JSONField(name = "fjys",ordinal = 66)
    List<SdQdlpkjjkFjys> fjys;
}
